<?php
namespace common\util;

use Overtrue\Pinyin\Pinyin;

class CommonUtil {
	
	
	//----------------------↘↘↘↘↘↘↘业务逻辑基础函数开始↙↙↙↙↙↙↙--------------------------------------
	
    
    
    
	//----------------------↗↗↗↗↗↗↗业务逻辑基础函数结束↖↖↖↖↖↖↖--------------------------------------
	
	
	
	
	/**
	 * ----------------------↘↘↘↘↘↘↘基础函数开始↙↙↙↙↙↙↙--------------------------------------
	 */
	
    /**
     * 高亮
     */
    static function highlight($str, $key) {
        return str_replace ( $key, "<font color='red'>" . $key . "</font>", $str );
    }
    
    /**
     * 获取文件列表(递归方式)
     */
    public static function getFileList($dir,$isOnlyGetName) {
        $fileArray = array();
        if(!is_dir($dir)){
            return $fileArray;
        }
        //打开目录
        $handle = opendir($dir);
        while (($file = readdir($handle)) !== false) {
            //排除掉当前目录和上一个目录
            if ($file == "." || $file == ".." || $file == 'index.html') {
                continue;
            }
            $file = $dir."/".$file;
            //如果是文件就打印出来，否则递归调用
            if(is_file($file)) {
                $fileArray[] = $file;
            } elseif(is_dir($file)) {
                $arr = self::getFileList($file);
                $fileArray = array_merge($fileArray, $arr);
            }
        }
        closedir($handle);
        return $fileArray;
    }
    
    /**
     * 删除文件
     * @param $filepath 文件路径，如/uploads/file/xx.gif
     */
    static function deleteFile($filepath){
        if(empty($filepath)){
            return true;
        }
        if(!CommonUtil::contain($filepath, "./")){
            $filepath = ".".$filepath;
        }
        if(file_exists($filepath)){
            return unlink(iconv("UTF-8","gb2312",$filepath));	//支持中文文件名删除
        }
    }
    
    /**
     * 获取服务器端IP地址
     * @return string
     */
    public static function get_server_ip() {
        if (isset($_SERVER)) {
            if($_SERVER['SERVER_ADDR']) {
                $server_ip = $_SERVER['SERVER_ADDR'];
            } else {
                $server_ip = $_SERVER['LOCAL_ADDR'];
            }
        } else {
            $server_ip = getenv('SERVER_ADDR');
        }
        return $server_ip;
    }
    
    //获得拼音数据
    /**
     * 获取拼音数据，如果字符太长，自动首字母模式
     * @param string $word 汉字或其他字符
     * @return string|unknown
     */
    public static function getPinyin($word){
        
        $pinyin = new Pinyin();
        $pinyinArr = $pinyin->convert($word);
        
        $str = '';
        foreach ($pinyinArr as $val){
            $str .= strtolower($val);
        }
        
        if(strlen($str) >= 16){ //如果拼音太长，则转换为首字母方式
        
            $str = '';
            foreach ($pinyinArr as $val2){
                $str .= strtolower(substr($val2, 0,1));
            }
        
        }
        return $str;
    }
    
    /**
     * 获取描述长度
     * @param $content  文章被encode后的内容，一般数据库里存储的就是已经被encode后的数据
     * @param $wordsNum 需要截取多少数字
     */
    public static function getDescription($content,$length){
        $content = CommonUtil::filterHtml(htmlspecialchars_decode($content));
        return CommonUtil::utf8Substr($content,0,$length);
    }
    
    //截取utf8字符串
    public static function utf8Substr($str, $from, $len){
        return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
            '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
            '$1',$str);
    }
    
    /**
     * 过滤输入内容中的html，转换成相应的字符
     */
    public static function filterHtml($str){
        $str=trim($str);
        if (strlen($str) <=0){
            return $str;
        }
        $search= array ("'<script[^>]*?>.*?</script>'si",  // 去掉 javascript
            "'<[\/\!]*?[^<>]*?>'si",          // 去掉 HTML 标记
            "'([\r\n])[\s]+'",                // 去掉空白字符
            "'&(quot|#34);'i",                // 替换 HTML 实体
            "'&(amp|#38);'i",
            "'&(lt|#60);'i",
            "'&(gt|#62);'i",
            "'&(nbsp|#160);'i"
        );                    // 作为 PHP 代码运行
    
        $replace= array ("",
            "",
            "\\1",
            "\"",
            "&",
            "<",
            ">",
            " "
        );
    
        return @preg_replace($search,$replace,$str);
    }
    
    /**
     * 生成UUID
     * @param $prefix 在UUID上加入一个扩展前缀
     */
    static function uuid($prefix = ''){
        $chars = md5(uniqid(mt_rand(), true));
        $uuid = substr($chars,0,8) . '-';
        $uuid .= substr($chars,8,4) . '-';
        $uuid .= substr($chars,12,4) . '-';
        $uuid .= substr($chars,16,4) . '-';
        $uuid .= substr($chars,20,12);
        return $prefix . $uuid;
    }
    
    /**
     * 判断[$str4source字符串]是否包含[$str4search字符串]，不区别大小写
     * @param $str4source	大单位
     * @param $str4search	小单位
     * 返回 true 或 false
     */
    static public function contain($str4source,$str4search){
        $index = strripos($str4source,$str4search);
        if($index === false){
            return false;
        }else{
            return true;
        }
    }
    
    /**
     * 简单格式时间，（年-月-日）如2014-12-14
     */
    static function formatSimpleDate($time,$format="Y-m-d"){
        return date($format,$time);
    }
    
    /**
     * 时间格式化
     */
    static function formatDate($time){
        if(empty($time) || $time == 0){
            return "";
        }
        $rtime = date ( "m-d H:i", $time );
        $htime = date ( "H:i", $time );
    
        $time = time () - $time;
    
        if ($time < 60) {
            $str = '刚刚';
        } elseif ($time < 60 * 60) {
            $min = floor ( $time / 60 );
            $str = $min . '分钟前';
        } elseif ($time < 60 * 60 * 24) {
            $h = floor ( $time / (60 * 60) );
            $str = $h . '小时前 ' . $htime;
        } elseif ($time < 60 * 60 * 24 * 3) {
            $d = floor ( $time / (60 * 60 * 24) );
            if ($d == 1){
                $str = '昨天 ' . $rtime;
            }
            else{
                $str = '前天 ' . $rtime;
            }
        } else {
            $str = $rtime;
        }
        return $str;
    }
	
	/**
	 * ----------------------↗↗↗↗↗↗↗基础函数结束↖↖↖↖↖↖↖--------------------------------------
	 */
	
}